<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Chapter 43. Zend_TimeSync</title>
<link rel="stylesheet" href="dbstyle.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.72.0">
<link rel="start" href="index.html" title="Programmer's Reference Guide">
<link rel="up" href="index.html" title="Programmer's Reference Guide">
<link rel="prev" href="zend.text.html" title="Chapter 42. Zend_Text">
<link rel="next" href="zend.timesync.working.html" title="43.2. Working with Zend_TimeSync">
<link rel="chapter" href="introduction.html" title="Chapter 1. Introduction to Zend Framework">
<link rel="chapter" href="zend.acl.html" title="Chapter 2. Zend_Acl">
<link rel="chapter" href="zend.auth.html" title="Chapter 3. Zend_Auth">
<link rel="chapter" href="zend.cache.html" title="Chapter 4. Zend_Cache">
<link rel="chapter" href="zend.config.html" title="Chapter 5. Zend_Config">
<link rel="chapter" href="zend.console.getopt.html" title="Chapter 6. Zend_Console_Getopt">
<link rel="chapter" href="zend.controller.html" title="Chapter 7. Zend_Controller">
<link rel="chapter" href="zend.currency.html" title="Chapter 8. Zend_Currency">
<link rel="chapter" href="zend.date.html" title="Chapter 9. Zend_Date">
<link rel="chapter" href="zend.db.html" title="Chapter 10. Zend_Db">
<link rel="chapter" href="zend.debug.html" title="Chapter 11. Zend_Debug">
<link rel="chapter" href="zend.dojo.html" title="Chapter 12. Zend_Dojo">
<link rel="chapter" href="zend.dom.html" title="Chapter 13. Zend_Dom">
<link rel="chapter" href="zend.exception.html" title="Chapter 14. Zend_Exception">
<link rel="chapter" href="zend.feed.html" title="Chapter 15. Zend_Feed">
<link rel="chapter" href="zend.filter.html" title="Chapter 16. Zend_Filter">
<link rel="chapter" href="zend.form.html" title="Chapter 17. Zend_Form">
<link rel="chapter" href="zend.gdata.html" title="Chapter 18. Zend_Gdata">
<link rel="chapter" href="zend.http.html" title="Chapter 19. Zend_Http">
<link rel="chapter" href="zend.infocard.html" title="Chapter 20. Zend_InfoCard">
<link rel="chapter" href="zend.json.html" title="Chapter 21. Zend_Json">
<link rel="chapter" href="zend.layout.html" title="Chapter 22. Zend_Layout">
<link rel="chapter" href="zend.ldap.html" title="Chapter 23. Zend_Ldap">
<link rel="chapter" href="zend.loader.html" title="Chapter 24. Zend_Loader">
<link rel="chapter" href="zend.locale.html" title="Chapter 25. Zend_Locale">
<link rel="chapter" href="zend.log.html" title="Chapter 26. Zend_Log">
<link rel="chapter" href="zend.mail.html" title="Chapter 27. Zend_Mail">
<link rel="chapter" href="zend.measure.html" title="Chapter 28. Zend_Measure">
<link rel="chapter" href="zend.memory.html" title="Chapter 29. Zend_Memory">
<link rel="chapter" href="zend.mime.html" title="Chapter 30. Zend_Mime">
<link rel="chapter" href="zend.openid.html" title="Chapter 31. Zend_OpenId">
<link rel="chapter" href="zend.paginator.html" title="Chapter 32. Zend_Paginator">
<link rel="chapter" href="zend.pdf.html" title="Chapter 33. Zend_Pdf">
<link rel="chapter" href="zend.registry.html" title="Chapter 34. Zend_Registry">
<link rel="chapter" href="zend.rest.html" title="Chapter 35. Zend_Rest">
<link rel="chapter" href="zend.search.lucene.html" title="Chapter 36. Zend_Search_Lucene">
<link rel="chapter" href="zend.server.html" title="Chapter 37. Zend_Server">
<link rel="chapter" href="zend.service.html" title="Chapter 38. Zend_Service">
<link rel="chapter" href="zend.session.html" title="Chapter 39. Zend_Session">
<link rel="chapter" href="zend.soap.html" title="Chapter 40. Zend_Soap">
<link rel="chapter" href="zend.test.html" title="Chapter 41. Zend_Test">
<link rel="chapter" href="zend.text.html" title="Chapter 42. Zend_Text">
<link rel="chapter" href="zend.timesync.html" title="Chapter 43. Zend_TimeSync">
<link rel="chapter" href="zend.translate.html" title="Chapter 44. Zend_Translate">
<link rel="chapter" href="zend.uri.html" title="Chapter 45. Zend_Uri">
<link rel="chapter" href="zend.validate.html" title="Chapter 46. Zend_Validate">
<link rel="chapter" href="zend.version.html" title="Chapter 47. Zend_Version">
<link rel="chapter" href="zend.view.html" title="Chapter 48. Zend_View">
<link rel="chapter" href="zend.xmlrpc.html" title="Chapter 49. Zend_XmlRpc">
<link rel="appendix" href="requirements.html" title="Appendix A. Zend Framework Requirements">
<link rel="appendix" href="coding-standard.html" title="Appendix B. Zend Framework Coding Standard for PHP">
<link rel="appendix" href="copyrights.html" title="Appendix C. Copyright Information">
<link rel="index" href="the.index.html" title="Index">
<link rel="section" href="zend.timesync.html#zend.timesync.introduction" title="43.1. Introduction">
<link rel="section" href="zend.timesync.working.html" title="43.2. Working with Zend_TimeSync">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader"><table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">Chapter 43. Zend_TimeSync</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="zend.text.html">Prev</a> </td>
<th width="60%" align="center"> </th>
<td width="20%" align="right"> <a accesskey="n" href="zend.timesync.working.html">Next</a>
</td>
</tr>
</table></div>
<div class="chapter" lang="en">
<div class="titlepage"><div><div><h2 class="title">
<a name="zend.timesync"></a>Chapter 43. Zend_TimeSync</h2></div></div></div>
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
<dt><span class="sect1"><a href="zend.timesync.html#zend.timesync.introduction">43.1. Introduction</a></span></dt>
<dd><dl>
<dt><span class="sect2"><a href="zend.timesync.html#zend.timesync.introduction.why">43.1.1. Why <code class="code">Zend_TimeSync</code> ?</a></span></dt>
<dt><span class="sect2"><a href="zend.timesync.html#zend.timesync.introduction.ntp">43.1.2. What is NTP ?</a></span></dt>
<dt><span class="sect2"><a href="zend.timesync.html#zend.timesync.introduction.sntp">43.1.3. What is SNTP?</a></span></dt>
<dt><span class="sect2"><a href="zend.timesync.html#zend.timesync.introduction.problematic">43.1.4. Problematic usage</a></span></dt>
<dt><span class="sect2"><a href="zend.timesync.html#zend.timesync.introduction.decision">43.1.5. Decide which server to use</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="zend.timesync.working.html">43.2. Working with Zend_TimeSync</a></span></dt>
<dd><dl>
<dt><span class="sect2"><a href="zend.timesync.working.html#zend.timesync.working.generic">43.2.1. Generic timeserver request</a></span></dt>
<dt><span class="sect2"><a href="zend.timesync.working.html#zend.timesync.working.multiple">43.2.2. Multiple timeservers</a></span></dt>
<dt><span class="sect2"><a href="zend.timesync.working.html#zend.timesync.working.protocol">43.2.3. Protocols of timeservers</a></span></dt>
<dt><span class="sect2"><a href="zend.timesync.working.html#zend.timesync.working.ports">43.2.4. Using ports for timeservers</a></span></dt>
<dt><span class="sect2"><a href="zend.timesync.working.html#zend.timesync.working.options">43.2.5. Options for timeservers</a></span></dt>
<dt><span class="sect2"><a href="zend.timesync.working.html#zend.timesync.working.different">43.2.6. Using different timeservers</a></span></dt>
<dt><span class="sect2"><a href="zend.timesync.working.html#zend.timesync.working.informations">43.2.7. Informations from timeservers</a></span></dt>
<dt><span class="sect2"><a href="zend.timesync.working.html#zend.timesync.working.exceptions">43.2.8. Taking care of exceptions</a></span></dt>
</dl></dd>
</dl>
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="zend.timesync.introduction"></a>43.1. Introduction</h2></div></div></div>
<p>
        <code class="code">Zend_TimeSync</code> is able to receive internet or network time from a timeserver using
        the <span class="strong"><strong>NTP</strong></span> or <span class="strong"><strong>SNTP</strong></span> protocol.
        With <code class="code">Zend_TimeSync</code> the Zend Framework is able to act indepentendly from the
        timesettings of the server where it is running.
    </p>
<p>
        To be independent from the actual time of the server, <code class="code">Zend_TimeSync</code> does internally
        work just with the difference of the real time which is send through NTP or SNTP and the internal
        servers time.
    </p>
<div class="note"><table border="0" summary="Note: Background">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td>
<th align="left">Background</th>
</tr>
<tr><td align="left" valign="top"><p>
            <code class="code">Zend_TimeSync</code> is not able to change the server's time, but it will return a
            <a href="zend.date.html#zend.date.introduction" title="9.1. Introduction">Zend_Date</a> instance from which the difference
            to the servers time can be worked with.
        </p></td></tr>
</table></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="zend.timesync.introduction.why"></a>43.1.1. Why <code class="code">Zend_TimeSync</code> ?</h3></div></div></div>
<p>
            So why would someone use <code class="code">Zend_TimeSync</code> ?
        </p>
<p>
            Normally every server within a multiserver farm will have a service running which syncronises
            the own time with a timeserver. So within a standard environment it should not be necessary to
            use <code class="code">Zend_TimeSync</code>. But it can become handy if there is no service available and if
            you don't have the right to install such a service.
        </p>
<p>
            Here are some example usecases, where <code class="code">Zend_TimeSync</code> is perfect suited for:
        </p>
<div class="itemizedlist"><ul type="opencircle">
<li style="list-style-type: circle">
<p>
                    <span class="strong"><strong>Server without timeservice</strong></span>
                </p>
<p>
                    If your application is running on a server and this server does not have any timeservice
                    running it can be good to implement <code class="code">Zend_TimeSync</code> within the own application.
                </p>
</li>
<li style="list-style-type: circle">
<p>
                    <span class="strong"><strong>Seperated database server</strong></span>
                </p>
<p>
                    If your database is running on a seperated server and the other server is not connected
                    with <span class="strong"><strong>NTP</strong></span> or <span class="strong"><strong>SNTP</strong></span>
                    to the application server you would expect problems with data stored into the database
                    where timestamps are used.
                </p>
</li>
<li style="list-style-type: circle">
<p>
                    <span class="strong"><strong>Multiple servers</strong></span>
                </p>
<p>
                    If your application is running on more than one server and the timebase of this servers
                    are not coupled together you can expect problems within your application when part of
                    the application are coming from one server and others from other servers.
                </p>
</li>
<li style="list-style-type: circle">
<p>
                    <span class="strong"><strong>Batch processing</strong></span>
                </p>
<p>
                    If your want to include or work with a timeservice within a batch file or within a
                    command line application.
                </p>
</li>
</ul></div>
<p>
            In all this cases <code class="code">Zend_TimeSync</code> is a perfect solution and can be used if you are
            not able to run any service on your server.
        </p>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="zend.timesync.introduction.ntp"></a>43.1.2. What is NTP ?</h3></div></div></div>
<p>
            The <code class="code">Network Time Protocol</code> (<span class="strong"><strong>NTP</strong></span>) is a protocol
            for synchronizing the clocks of computer systems over packet-switched, variable-latency data
            networks. NTP uses UDP port 123 as it's transport layer. See
            <a href="http://en.wikipedia.org/wiki/Network_Time_Protocol" target="_top">this wikipedia article</a>
            for details about this protocol.
        </p>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="zend.timesync.introduction.sntp"></a>43.1.3. What is SNTP?</h3></div></div></div>
<p>
            The <code class="code">Simple Network Time Protocol</code> (<span class="strong"><strong>SNTP</strong></span>) is a
            protocol for syncronising with clocks of computer systems over packet-switched, variable-latency
            data networks. SNTP uses UDP port 37 as it's transport layer. It is nearly related to the
            <code class="code">NTP</code> Protocol but simpler.
        </p>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="zend.timesync.introduction.problematic"></a>43.1.4. Problematic usage</h3></div></div></div>
<p>
            Be warned that when you are using <code class="code">Zend_TimeSync</code> you will have to think about some
            details related to the structure of timesync and the web itself. How problems can be avoided
            and best practice will be described here. Read carefully before using <code class="code">Zend_TimeSync</code>.
        </p>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="zend.timesync.introduction.decision"></a>43.1.5. Decide which server to use</h3></div></div></div>
<p>
            You have to select the timeserver which you want to use very carefully. This has several reasons
            which are described here:
        </p>
<div class="itemizedlist"><ul type="opencircle">
<li style="list-style-type: circle">
<p>
                    Distance
                </p>
<p>
                    The distance from the server where your application is running to the timeserver you are
                    requesting. If your server is in europe it would make no sense to use a timeserver in
                    tahiti. Select always a server which is not far away. This reduces the time for the
                    request and reduced network load.
                </p>
</li>
<li style="list-style-type: circle">
<p>
                    Speed
                </p>
<p>
                    How long it takes to receive the request is also relevant. Try some servers to get the
                    best result. If you are requesting a server which is never accessible you will always
                    have a unnecessary delay.
                </p>
</li>
<li style="list-style-type: circle">
<p>
                    Splitting
                </p>
<p>
                    Do not use always the same server. All timeservers will lock request from servers which
                    are flooding the server. If your application makes excessive use of timeservers you
                    should not use a single timeserver but one of the pools described later.
                </p>
</li>
</ul></div>
<p>
            So where can you find a timeserver ? Generally you can use any timeserver you know. This can be
            a timeserver within you LAN or any public timeserver you know. If you decide to use a public
            timeserver you should use a server pool. Serverpools are public addresses where you will get
            a random timeserver from the pool if you request the time. This way you will not have to split your
            requests. There are public serverpools available for different regions so you will not have any of the
            problems mentioned above.
        </p>
<p>
            Take a look at <a href="http://www.pool.ntp.org" target="_top">pool.ntp.org</a> to get your nearest
            serverpool. So if your server is located within germany for example you can connect to
            <code class="code">0.europe.pool.ntp.org</code> and so on.
        </p>
</div>
</div>
</div>
<div class="navfooter"><table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="zend.text.html">Prev</a> </td>
<td width="20%" align="center"> </td>
<td width="40%" align="right"> <a accesskey="n" href="zend.timesync.working.html">Next</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Chapter 42. Zend_Text </td>
<td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
<td width="40%" align="right" valign="top"> 43.2. Working with Zend_TimeSync</td>
</tr>
</table></div>
<div class="revinfo"></div>
</body>
</html>
